package empleados.clases.componentes;

import empleados.clases.entidades.BaseDatos;
import java.sql.ResultSet;

public class Direccion extends Localidad{

    private BaseDatos bd;

    private int id;
    private String calle;
    private String colonia;
    private int numeroCasa;
    private int numeroCasaInterior;
    private String codigoPostal;
    private Telefono[] telefonos;
    private TipoDireccion tipoDireccion;

    public enum TipoDireccion{
        DEFAULT("Sin tipo"),
        EMPRESA("Empresa"),
        PRIVADA("Privado");

        private final String name;

        private TipoDireccion(String tipo){
            this.name = tipo;
        }

        public String getName(){
            return this.name;
        }

    }

    public Direccion(int id){
        ResultSet resultado;
        ResultSet resultadoTelefonos;
        int cntTelefonos = 0;
        Telefono[] telefonos;
        bd = new BaseDatos("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1:3306/terafit", "root", "");
        resultado = bd.obtenerDatos("SELECT * FROM direccion AS d JOIN localidad AS l ON d.id_localidad = l.id JOIN estado AS e ON l.id_estado = e.id JOIN pais AS p ON e.id_pais = p.id WHERE d.id = " + id);
        try{
            resultado.next();
            resultadoTelefonos = bd.obtenerDatos("SELECT COUNT(*) FROM direccion AS d JOIN localidad AS l ON d.id_localidad = l.id JOIN direccion_telefono AS dt ON dt.id_direccion = d.id JOIN telefono AS t ON dt.id_telefono = t.id WHERE d.id = " + id);
            resultadoTelefonos.next();
            telefonos = new Telefono[resultadoTelefonos.getInt(1)];
            resultadoTelefonos = bd.obtenerDatos("SELECT * FROM direccion AS d JOIN localidad AS l ON d.id_localidad = l.id JOIN direccion_telefono AS dt ON dt.id_direccion = d.id JOIN telefono AS t ON dt.id_telefono = t.id WHERE d.id = " + id);
            while(resultadoTelefonos.next()){
                telefonos[cntTelefonos++] = new Telefono(resultadoTelefonos.getInt("id_telefono"));
            }
            this.setDireccion(resultado.getInt(1), resultado.getString("calle"), resultado.getString("colonia"), resultado.getInt("numeroCasa"), resultado.getInt("numeroCasaInterior"), resultado.getString("codigoPostal"), TipoDireccion.DEFAULT, telefonos, resultado.getString("ciudad"), resultado.getString("estado"), resultado.getString("pais"));
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("No existe esa direccion.");
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    private void setDireccion(int id, String calle, String colonia, int numeroCasa, int numeroCasaInterior, String codigoPostal, TipoDireccion tipoDireccion, Telefono[] telefonos, String ciudad, String estado, String pais){
        this.setId(id);
        this.setCalle(calle);
        this.setColonia(colonia);
        this.setNumeroCasa(numeroCasa);
        this.setNumeroCasaInterior(numeroCasaInterior);
        this.setCodigoPostal(codigoPostal);
        this.setTipoDireccion(tipoDireccion);
        this.setTelefonos(telefonos);
        this.setLocalidad(id, ciudad, estado, pais);
    }

    private void setId(int id){
        this.id = id;
    }

    private void setCalle(String calle){
        this.calle = calle;
    }

    private void setColonia(String colonia){
        this.colonia = colonia;
    }

    private void setNumeroCasa(int numeroCasa){
        this.numeroCasa = numeroCasa;
    }

    private void setNumeroCasaInterior(int numeroCasaInterior){
        this.numeroCasaInterior = numeroCasaInterior;
    }

    private void setCodigoPostal(String codigoPostal){
        this.codigoPostal = codigoPostal;
    }

    protected void setTipoDireccion(TipoDireccion tipoDireccion){
        this.tipoDireccion = tipoDireccion;
    }

    private void setTelefonos(Telefono[] telefonos){
        this.telefonos = telefonos;
    }

    public String getCalle(){
        return this.calle;
    }

    public String getColonia(){
        return this.colonia;
    }

    public String getNumeroCasa(){
        return this.numeroCasa != 0 ? "#" + this.numeroCasa : "";
    }

    public String getNumeroCasaInterior(){
        return this.numeroCasaInterior != 0 ? "Int. " + this.numeroCasaInterior : "";
    }

    public String getCodigoPostal(){
        return this.codigoPostal;
    }

    public String getTelefonos(){
        String telSalida = "";
        for(Telefono tel: telefonos){
            telSalida += "Telefono:\t" + tel.getCodigoPais() + " " + tel.getCodigoOperador() + " " + tel.getNumero() + "\n";
        }
        return telSalida;
    }

    public String getTipo(){
        return this.tipoDireccion.getName();
    }

    public String toString(){
        String cadena = "";
        cadena += this.calle + " #" + this.numeroCasa + "-" + this.numeroCasaInterior + "\n" + "Col. " + this.colonia + "\n" + "CP. " + this.codigoPostal + "\n";
        for(Telefono t: this.telefonos) cadena += t + "\n";
        cadena += super.toString();
        return cadena;
    }

    /*public String getDirecciones(){
        String direcciones = "";
        ResultSet resultado;
        ResultSet resultadoTelefonos;
        int cntTelefonos;
        bd = new BaseDatos("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1:3306/terafit", "root", "");
        resultado = bd.obtenerDatos("SELECT * FROM direccion AS d JOIN localidad AS l ON d.id_localidad = l.id JOIN estado AS e ON l.id_estado = e.id JOIN pais AS p ON e.id_pais = p.id");
        try{
            while(resultado.next()){
                cntTelefonos = 0;
                direcciones += resultado.getString(2) + " ";
                direcciones += resultado.getString(3) + " ";
                direcciones += resultado.getInt(4) + " ";
                direcciones += resultado.getInt(5) + " ";
                direcciones += resultado.getString(6) + " ";
                super.setValores(resultado.getInt(7), resultado.getString(9), resultado.getString(10), resultado.getString(11));
                direcciones += super.getCiudad() + " ";
                direcciones += super.getEstado() + " ";
                direcciones += super.getPais() + " ";
                super.setValores(resultado.getInt(7), resultado.getString(9), resultado.getString(10), resultado.getString(11));
                resultadoTelefonos = bd.obtenerDatos("SELECT COUNT(*) FROM direccion AS d JOIN localidad AS l ON d.id_localidad = l.id JOIN direccion_telefono AS dt ON dt.id_direccion = d.id JOIN telefono AS t ON dt.id_telefono = t.id WHERE d.id = " + resultado.getString(1));
                resultadoTelefonos.next();
                this.telefonos = new Telefono[resultadoTelefonos.getInt(1)];
                resultadoTelefonos = bd.obtenerDatos("SELECT * FROM direccion AS d JOIN localidad AS l ON d.id_localidad = l.id JOIN direccion_telefono AS dt ON dt.id_direccion = d.id JOIN telefono AS t ON dt.id_telefono = t.id WHERE d.id = " + resultado.getString(1));
                while(resultadoTelefonos.next()){
                    this.telefonos[cntTelefonos++] = new Telefono(resultadoTelefonos.getInt(14));
                }
                for(Telefono telefono:this.telefonos){
                    direcciones += telefono.getCodigoPais() + " " + telefono.getCodigoOperador() + " " + telefono.getNumero() + " ";
                }
                direcciones += "\n";
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return direcciones;
    }*/

}